//https://www.luogu.com.cn/problem/P4588
//建一棵有1e5叶子结点的线段树维护区间乘积,叶子结点初始值为1，乘则修改为x，除则修改回1
//log2（Q）*Q*T
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
long long M;
struct node{
    int l,r;
    long long sum;
}tree[maxn*4];
void build(int now,int l,int r){
    tree[now].l=l,tree[now].r=r;
    tree[now].sum=1;
    if(l==r){
        return;
    }
    int mid=l+r>>1;
    build(now<<1,l,mid);
    build(now<<1|1,mid+1,r);
    return;
}
void change(int now,int i,long long k){
    if(tree[now].l==tree[now].r&&tree[now].r==i){
        tree[now].sum=k;
        return;
    }
    int mid=tree[now].l+tree[now].r>>1;
    if(mid>=i) change(now<<1,i,k);
    else change(now<<1|1,i,k);
    tree[now].sum=(tree[now<<1].sum*tree[now<<1|1].sum)%M;
    return;
}
int main(){
    int t;
    scanf("%d",&t);
    while(t--){
        int Q;
        scanf("%d%lld",&Q,&M);
        build(1,1,Q);
        for(int i=1;i<=Q;i++){
            int op;
            scanf("%d",&op);
            if(op==1){
                int x;
                scanf("%d",&x);
                change(1,i,x);
            }
            else{
                int ops;
                scanf("%d",&ops);
                change(1,ops,1);
            }
            printf("%lld\n",tree[1].sum);
        }
    }
    return 0;
}